import axios from 'axios'
import { useUserStore } from '@/stores/userStore/user'
import { ElMessage } from 'element-plus'

const getConfig = () => {
  return import.meta.env.VITE_APP_API_BASE_URL
}

// 创建Axios实例
const service = axios.create({
  baseURL: getConfig(),
  // 从环境变量设置基础URL
  // timeout: 5000, // 设置请求超时时间
})

// 定义不需要消息提示的接口列表
const noMessageUrls = [
  // 在这里添加不需要消息提示的接口路径
  '/public/welcome',
  '/system/list',
  '/operation/log',
  '/login/log',
  '/person/list',
  '/team/list',
  '/material/list',
  '/institution/list',
  '/device/list',
  '/training/list',
  '/team/drop/list',
  '/institution/drop/list',
  '/simulation/list/name',
  '/simulation/scene/name',
  '/simulation/dispatch/list',
  '/simulation/information/list',
  '/team/type/list',
  '/team/group/list',
  '/material/type/list',
  '/person/type/list',
  '/overview/analysis',
  '/overview/program',
  '/overview/completion',
  '/overview/line',
  '/accident/accidentList',
  '/accident/pieChart',
  '/accident/stripChart',
  '/accident/personList',
  '/weather/wind',
  '/team/group/obtain',
  //
  '/Draw/DrawHeatMap/map',
  '/Save/getWebConfig',
  '/layer/all',
]

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 发送请求前可以做一些处理，比如添加token等
    const userStore = useUserStore()
    if (userStore.getToken) {
      // 如果存在token，将其添加到请求头中
      config.headers['Authorization'] = 'Bearer ' + userStore.getToken
    }
    return config
  },
  (error) => {
    // 处理请求错误
    return Promise.reject(error)
  },
)

// 响应拦截器
service.interceptors.response.use(
  (response) => {
    // console.log(response)
    // 可以对响应数据做一些处理
    const res = response.data
    const url = response.config.url
    // console.log('response.config', response.config)
    // 检查当前请求是否需要消息提示
    const showMessage = !noMessageUrls.some((noMessageUrl) => url.includes(noMessageUrl))
    if (res.code == 200) {
      if (response.config.method == 'get' && url == '/login') {
        return
      } else {
        // 当状态码为200时，提示成功信息并返回数据
        if (showMessage && res.message) {
          ElMessage.success(res.message)
        }
      }
      return res
    }
  },
  (error) => {
    console.error('响应错误:', error)
    // 处理响应错误
    const url = error.config?.url
    // 检查当前请求是否需要消息提示
    const showMessage = !noMessageUrls.some((noMessageUrl) => url?.includes(noMessageUrl))

    let errorMessage = error.response?.data?.message

    // if (error.response) {
    //   // 服务器返回了错误状态码
    //   switch (error.response.status) {
    //     case 400:
    //       errorMessage = '请求参数错误';
    //       break;
    //     case 401:
    //       errorMessage = '未授权，请重新登录';
    //       break;
    //     case 403:
    //       errorMessage = '拒绝访问';
    //       break;
    //     case 404:
    //       errorMessage = '请求资源不存在';
    //       break;
    //     case 500:
    //       errorMessage = '服务器内部错误';
    //       break;
    //     default:
    //       errorMessage = `未知错误(${error.response.status})`;
    //   }
    // } else if (error.request) {
    //   // 请求已发出但没有收到响应
    //   errorMessage = '网络错误，请检查网络连接';
    // }

    if (showMessage) {
      ElMessage.error(errorMessage)
    }

    return Promise.reject(new Error(errorMessage))
  },
)

export default service
